/** 打包升级版本号指令 */
const childProcess = require('child_process');
const readLine = require('readline');
const fsJetPack = require('fs-jetpack');

// 创建一个readline的interface实例
const readline = readLine.createInterface({
    input: process.stdin, // 要监听的可读流。 此选项是必需的。
    output: process.stdout, // 要将逐行读取的数据写入的可写流
});



/** 获取要打包的环境 */
async function getBuildEnv() {
    return new Promise((resolve, reject) => {
        readline.question('请选择你要构建的环境(test|dev) 默认dev: ', (env = 'dev') => {
            if (env === 'dev' || env === 'test') resolve(env)
            else resolve('dev')
        })
    })
}


/** 判断是否需要更新 */
async function isNeedUpdate() {
    return new Promise((resolve, reject) => {
        readline.question('是否需要更新本次的包版本号(y|n) 默认y: ', (update = 'n') => {
            resolve(update === 'y' ? true : false)
        })
    })
}

/** 更新当前环境的包版本号 */
async function updateVersion(env) {
    const versionJson = JSON.parse(fsJetPack.read('./src/assets/version.json'));
    console.log('当前版本：' + versionJson[env + 'Version'])
    const currentVersion = Number(versionJson[env + 'Version'].split('.').join(''));
    const nextVersion = String(currentVersion + 1).split('').join('.');
    versionJson[env + 'Version'] = nextVersion;
    console.log('更新后的版本：' + nextVersion)
    fsJetPack.writeAsync('./src/assets/version.json', JSON.stringify(versionJson))
}

/** 执行cmd */
function runCmd(cmd) {
    childProcess.spawn(cmd, { shell: true })
}

/** 主函数 */
async function main() {
  const env = await getBuildEnv();
  const needUpdate = await isNeedUpdate();
  if(needUpdate){
    await updateVersion(env)
  }
  runCmd(`cross-env APP_ENV=true cross-env UMI_ENV=${env} umi build`);
  readline.close()
}


main()